package net.luohuasheng.bee.proxy.mybatis.common.utils;


import net.luohuasheng.bee.proxy.core.utils.CastUtils;
import org.apache.ibatis.binding.MapperMethod;

import java.util.Map;

public class ClassUtils {
    private ClassUtils() {
    }

    /**
     * 在方法参数中查找 请求对象
     *
     * @param params   请求参数
     * @param objClass 目标对象类型
     * @param <T>      返回对象类型
     * @return 返回分页对象
     */
    public static <T> T findObjectFromParams(Object params, Class<T> objClass) {
        if (params == null) {
            return null;
        }

        if (objClass.isAssignableFrom(params.getClass())) {
            return CastUtils.cast(params);
        }

        if (params instanceof MapperMethod.ParamMap) {
            MapperMethod.ParamMap<Object> paramMap = CastUtils.cast(params);
            for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
                Object paramValue = entry.getValue();

                if (paramValue != null && objClass.isAssignableFrom(paramValue.getClass())) {
                    return CastUtils.cast(paramValue);
                }
            }
        }

        return null;
    }

}
